package com.vencent.spring.web;

import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

/**
 * 你可以使用 @Component + @RequestMapping 来代替  @Controller。
 * @author 1d
 *
 */
@Controller
public class HomeController {
	
	/**
	 * 如果model中有的key在重定向中的占位符中没有对应, 那么他将会作为一个普通的查询参数。
	 * 这种通过url来传递参数(在请求中), 不能传递对象，所以引入今天的主题: flash.
	 * @return
	 */
	@RequestMapping("/my/home")
	public String home(Model model){
		model.addAttribute("username", "wang");
		model.addAttribute("id", 10);
		return "redirect:/my/{username}";
	}
	
	/**
	 * 重定向后
	 * @param username
	 * @param id
	 * @return
	 */
	@RequestMapping("/my/{username}")
	public String home(@PathVariable String username, Long id){
		if(id == 10){
			return username;
		}
		return "error";
	}
	
	/**
	 * 重定向。
	 * flash: 借助于session， spring自动管理session, 自动存删。
	 * @param model
	 * @return
	 */
	@RequestMapping("/my/flash/home")
	public String homeFlash(RedirectAttributes model){
		model.addAttribute("username", "wang");
		model.addFlashAttribute("Lee");
		return "redirect:/my/flash/{username}";
	}
	
	@RequestMapping("/my/flash/{username}")
	public String home(@PathVariable String username, Model model){
		Map<String, Object> map = model.asMap();
		for (Map.Entry<String, Object> entry : map.entrySet()) {  
		    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
		} 
		return (String) map.get("string");
	}
}
